package com.yang.designmode.prototype.business;

import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 系统A要同步数据中的统计发数据
 * 保证数据的一致性
 */
public class ProtoType_1 {
    //记录缓存 检索统计数据
    private ConcurrentHashMap<String, SearchWord> currentKeyWords = new ConcurrentHashMap<>();
    private long lastUpdateTime = -1;

    /**
     * 系统A需要调用同步的方法
     * 1. 根据时间戳查询出对应的统计数据
     * 2. 遍历每条统计数据
     * 3. 比较已经缓存的数据，存在就替换，不存在就删除
     */
    public void refresh() {
        // 从数据库中查询到对应时间戳 大于lastUpdateTime的数据
        List<SearchWord> list = getSearchWords(lastUpdateTime);

        //找到最新的时间戳
        long maxNewUpdateTime = lastUpdateTime;

        if(list!=null){
            // 遍历每条统计数据
            for (SearchWord data : list) {
                if(data.getLastUpdateTime()>maxNewUpdateTime){
                    maxNewUpdateTime = data.getLastUpdateTime();
                }
                if (currentKeyWords.containsKey(data.getKeyWord())) {
                    currentKeyWords.replace(data.getKeyWord(), data);
                } else {
                    currentKeyWords.put(data.getKeyWord(), data);
                }

                //记录最新时间
                lastUpdateTime=maxNewUpdateTime;
            }
        }

    }

    private List<SearchWord> getSearchWords(long lastUpdateTime){
        return null;
    }
}
